diff -ru gecko-mediaplayer-1.0.4-orig/ChangeLog gecko-mediaplayer-1.0.4/ChangeLog
--- gecko-mediaplayer-1.0.4-orig/ChangeLog	2011-07-01 12:40:50.000000000 -0400
+++ gecko-mediaplayer-1.0.4/ChangeLog	2011-07-09 20:58:47.000000000 -0400
@@ -1,3 +1,6 @@
+Development
+    Improvements to the apple.com/trailers fix, caching now works properly
+    Fix regression at apple.com/trailers, side effect of fully caching the file for now
 1.0.4
 	Fix problem where file is downloaded before gnome-mplayer is started (locally cached)
 	Added Portuguese translation
diff -ru gecko-mediaplayer-1.0.4-orig/src/memmem_compat.cpp gecko-mediaplayer-1.0.4/src/memmem_compat.cpp
--- gecko-mediaplayer-1.0.4-orig/src/memmem_compat.cpp	2011-06-06 17:47:44.000000000 -0400
+++ gecko-mediaplayer-1.0.4/src/memmem_compat.cpp	2011-07-09 20:58:24.000000000 -0400
@@ -14,7 +14,7 @@
   
    You should have received a copy of the GNU General Public License
    along with this file; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+   Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335,
    USA.  */
 
 
diff -ru gecko-mediaplayer-1.0.4-orig/src/plugin.cpp gecko-mediaplayer-1.0.4/src/plugin.cpp
--- gecko-mediaplayer-1.0.4-orig/src/plugin.cpp	2011-06-20 11:00:33.000000000 -0400
+++ gecko-mediaplayer-1.0.4/src/plugin.cpp	2011-07-09 20:57:50.000000000 -0400
@@ -1320,7 +1320,7 @@
     ListItem *item = (ListItem *) clientp;
     gdouble percent, rate;
     gchar *text;
-    gboolean ok_to_play;
+    gboolean ok_to_play = FALSE;
     gint id;
     gboolean ready;
     gboolean newwindow;
@@ -1364,8 +1364,11 @@
                                         rate);
                 }
                 send_signal_with_string(plugin, item, "SetProgressText", text);
-                if (!item->opened)
-                    send_signal_with_string(plugin, item, "SetURL", item->src);
+                if (!item->opened) {
+                    //open_location (plugin, item, TRUE);
+                    //item->opened = TRUE;
+                    //send_signal_with_string(plugin, item, "SetURL", item->src);
+                }
                 if (plugin->post_dom_events && plugin->id != NULL) {
                     postDOMEvent(plugin->mInstance, plugin->id, "qt_progress");
                     postDOMEvent(plugin->mInstance, plugin->id, "qt_durationchange");
@@ -1376,6 +1379,7 @@
                 item->lastsize = item->localsize;
             }
         }
+        
         if (!item->opened) {
             if ((item->localsize >= (plugin->cache_size * 1024)) && (percent >= 0.2)) {
                 printf("Setting to play because %i > %i\n", item->localsize,
@@ -1391,7 +1395,7 @@
             if (ok_to_play == FALSE) {
                 if (item->bitrate == 0 && item->bitrate_requests < 5
                     && ((gint) (percent * 100) > item->bitrate_requests)) {
-                    item->bitrate = request_bitrate(plugin, item, item->local);
+                    //item->bitrate = request_bitrate(plugin, item, item->local);
                     item->bitrate_requests++;
                 }
                 if (item->bitrate > 0) {
@@ -1407,6 +1411,7 @@
             }
 
         }
+        
         // if not opened, over cache level and not an href target then try and open it
         if ((!item->opened) && ok_to_play == TRUE) {
             id = item->controlid;
@@ -1418,6 +1423,7 @@
             if (!item->streaming) {
                 printf("in progress_callback\n");
                 plugin->playlist = list_parse_qt(plugin->playlist, item);
+                plugin->playlist = list_parse_qt2(plugin->playlist, item);
                 plugin->playlist = list_parse_asx(plugin->playlist, item);
                 plugin->playlist = list_parse_qml(plugin->playlist, item);
                 plugin->playlist = list_parse_ram(plugin->playlist, item);
@@ -1456,6 +1462,7 @@
             }
             g_free(path);
         }
+        
 
     }
 
@@ -1493,13 +1500,14 @@
 
             }
             fclose(local);
-            printf("fetched %s to %s\n", item->src, item->local);
+            printf("fetched %s to %s opened = %i\n", item->src, item->local, item->opened);
+            send_signal_with_double(plugin, item, "SetCachePercent", 1.0);
             send_signal_with_double(plugin, item, "SetCachePercent", 0.0);
             item->retrieved = TRUE;
         }
 
 
-        if ((!item->opened)) {
+        if (!item->opened) {
             id = item->controlid;
             path = g_strdup(item->path);
             ready = item->playerready;
@@ -1509,13 +1517,14 @@
             if (!item->streaming) {
                 printf("in CURLGetURLNotify\n");
                 plugin->playlist = list_parse_qt(plugin->playlist, item);
+                plugin->playlist = list_parse_qt2(plugin->playlist, item);
                 plugin->playlist = list_parse_asx(plugin->playlist, item);
                 plugin->playlist = list_parse_qml(plugin->playlist, item);
                 plugin->playlist = list_parse_ram(plugin->playlist, item);
             }
             // printf("item->play = %i\n", item->play);
             // printf("item->src = %i\n", item->src);
-            // printf("calling open_location from Write\n");
+            // printf("calling open_location from CURLGetURLNotify\n");
             if (item->play) {
                 send_signal_with_integer(plugin, item, "SetGUIState", PLAYING);
                 open_location(plugin, item, TRUE);
